Index: l10n_community.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/l10n_community.module,v
retrieving revision 1.1.2.23.2.66.2.25
diff -u -p -r1.1.2.23.2.66.2.25 l10n_community.module
--- l10n_community.module	6 Dec 2010 12:20:18 -0000	1.1.2.23.2.66.2.25
+++ l10n_community.module	15 Dec 2010 14:21:44 -0000
@@ -847,6 +847,10 @@ function l10n_community_build_filter_val
     }
   }
 
+  if (isset($params['sort']) && is_array($params['sort'])) {
+      $params['sort'] = ((string) $params['status']['alphabetically']) | ((string) $params['status']['Suggested time']) | ((string) $params['status']['Approved time']) | ((string) $params['status']['String length']);
+  }
+
   $filter = array(
     'project' => NULL,
     'status' => isset($params['status']) ? (int) $params['status'] : L10N_STATUS_ALL,
@@ -857,6 +861,7 @@ function l10n_community_build_filter_val
     'context' => isset($params['context']) ? (string) $params['context'] : 'all',
     'limit' => (isset($params['limit']) && in_array($params['limit'], array(5, 10, 20, 30))) ? (int) $params['limit'] : 10,
     'sid'   => (!empty($params['sid']) && is_numeric($params['sid'])) ? $params['sid'] : 0,
+    'sort' => isset($params['sort']) ? (string) $params['sort'] : '',
   );
 
   // The project can be a dropdown or text field depending on number of
Index: translate.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/translate.inc,v
retrieving revision 1.1.2.7.2.31.2.28
diff -u -p -r1.1.2.7.2.31.2.28 translate.inc
--- translate.inc	6 Dec 2010 12:20:18 -0000	1.1.2.7.2.31.2.28
+++ translate.inc	15 Dec 2010 14:21:44 -0000
@@ -169,6 +169,14 @@ function l10n_community_filter_form(&$fo
     '#display_none' => $form_state['values']['limit'] == 10,
   );
 
+ $form['sort'] = array(
+    '#type' => 'select',
+    '#title' => t('Sort by'),
+    '#default_value' => isset($filters['sort']) ? $filters['sort'] : '',
+    '#options' => drupal_map_assoc(array('', Alphabetically, 'Suggested time', 'Approved time', 'String length')),
+    '#default_value' => $filters['sort'],
+  );
+
   $form['submit'] = array(
     '#value' => t('Filter'),
     '#type' => 'submit',
@@ -189,7 +197,7 @@ function theme_l10n_community_filter_for
   $output = '<div class="l10n-server-filter clear-block">';
 
   // Only display these elements individually.
-  $elements = array('project', 'release', 'context', 'status', 'author', 'search', 'limit', 'sid');
+  $elements = array('project', 'release', 'context', 'status', 'author', 'search', 'limit', 'sid', 'sort');
   foreach ($form as $id => &$element) {
     if (in_array($id, $elements)) {
       $title = $element['#title'];
@@ -874,10 +882,31 @@ function l10n_community_get_strings($lan
     }
   }
 
+  if (isset($filters['sort'])){
+    if($filters['sort'] == 'Suggested time'){
+       $where[] = "ts.has_suggestion = 1";
+    }elseif($filters['sort'] == 'Approved time'){
+       $where[] = "t.is_active  = 1";
+     }
+  }
+
   // Build the queries
   $sql_args = array_merge($join_args, $where_args);
   $sql_where = implode(' ', $join) . (count($where) ? (' WHERE '. implode(' AND ', $where)) : '');
   $sql = $select .' '. $sql_where;
+
+   if (!empty($filters['sort'])) {
+     if($filters['sort'] == 'Suggested time'){
+         $sql .= " ORDER BY t.time_entered DESC";
+     }elseif($filters['sort'] == 'Approved time'){
+         $sql .= " ORDER BY t.time_approved DESC";
+     }elseif($filters['sort'] == 'String length'){
+         $sql .= " ORDER BY CHAR_LENGTH(s.value)";
+     }else{
+          $sql .= " ORDER BY s.value ASC";
+     }
+   }
+
   $sql_count = $select_count .' '. $sql_where;
 
   // We either need a pager or a full result.
